﻿'Nombre:                         Manejador
'Descripcion:                    Clase que controla todas las operaciones sobre el catalogo de categorias
'Dependencias:                 
'Fecha de creación:              20090619
'Autor:                          VMORALES
'Fecha de modifcación:         
'Responsable:                  
'Num. de modifcación:            0

Option Explicit On
Option Strict On

#Region "Imports"

Imports System.Collections.Specialized
Imports System.ComponentModel

#End Region

Namespace Categoria

    ''' <summary>
    ''' Clase que controla todas las operaciones sobre el catalogo de categorias
    ''' </summary>
    Public Class Manejador

		Public Shared Event CategoriasActivasCambiadas()

#Region "Constantes"

#End Region

#Region "Miembros"

        Private Shared _dao As ICategoriaDao = DirectCast(Application.Ctx.GetObject("CategoriaDao"), ICategoriaDao) 'Clase de acceso a los datos en la base de datos
        Public Shared Event ErrorPersistencia As ErrorPersistenciaHandler
        Public Delegate Sub ErrorPersistenciaHandler(ByVal dataProvider As Manejador, ByVal e As Exception)

#End Region

#Region "Propiedades"

        Public Shared Property Seleccion() As Entidades.CategoriaDTO
            Get
                Return Nothing
            End Get
            Set(ByVal value As Entidades.CategoriaDTO)
            End Set
        End Property

        Public Shared Property CategoriasActivas() As Entidades.CategoriaDTO()
            Private Set(ByVal value As Entidades.CategoriaDTO())
            End Set
            Get
                Return Nothing
            End Get
        End Property

#End Region

#Region "Contructores"

#End Region

#Region "Funciones"

        Public Function ObtenerCategorias() As CategoriasUI
            Dim categorias = New CategoriasUI()

            AddHandler categorias.ItemEndEdit, AddressOf CategoriasItemEndEdit
            AddHandler categorias.CollectionChanged, AddressOf ColeccionCategoriasCambiada

            If _dao.ObtenerCantidad() > 0 Then
                For Each c As Entidades.CategoriaDTO In _dao.Obtener()
                    categorias.Add(New CategoriaUI(c))
                Next
            Else
                categorias.Add(New CategoriaUI())
            End If

            Return categorias
        End Function

        Sub ColeccionCategoriasCambiada(ByVal sender As Object, ByVal e As NotifyCollectionChangedEventArgs)
            Dim categoria As CategoriaUI

            Select Case e.Action
                Case NotifyCollectionChangedAction.Remove
                    For Each item As Object In e.OldItems
                        categoria = TryCast(item, CategoriaUI)

                        If Not categoria Is Nothing Then
                            Try
                                _dao.Eliminar(categoria.DTO)
                            Catch ex As Exception
                                RaiseEvent ErrorPersistencia(Me, ex)
                            End Try
                        End If
                    Next
            End Select
        End Sub

        Sub CategoriasItemEndEdit(ByVal sender As IEditableObject)
            Dim categoria As CategoriaUI = TryCast(sender, CategoriaUI)

            If Not categoria Is Nothing Then
                Try
                    If _dao.Existe(categoria.DTO) Then
                        _dao.Actualizar(categoria.DTO)
                    Else
                        _dao.Agregar(categoria.DTO)
                    End If
                Catch ex As Exception
                    RaiseEvent ErrorPersistencia(Me, ex)
                End Try
            End If
        End Sub

#End Region

    End Class

End Namespace